A typical software system is made up of a collection of software modules provided together to perform one or more services. In many cases, such a system is designed to run on a particular underlying hardware or software element, such as a specific central processing unit or a specific operating system. Some of the functions provided by the software system are element dependent. That is, each of these functions must be implemented as an element specific routine which runs only with the particular underlying element. The system may also be designed to support multiple such elements in a same element class. For example, a CPU class would contain several different CPUs or CPU versions. Each element dependent function would be separately implemented for the several different CPUs as several correspondingly different element specific routines.
A software system may be required in some cases to run on a single underlying element in the class, but in other cases to support multiple elements in the class, as described above. This may also be the case for a number of different classes (eg. a CPU class, an operating system class, etc.). For each class, the software system must then be written to include all possible implementations of each element dependent function corresponding to all possible elements. The system must also perform some processing to determine the correct implementations of each element dependent function. Unfortunately, this requires a significant amount of memory to store the element specific routines for all the possible implementations. Furthermore, a significant amount of execution time is required to determine the correct implementations. Thus, a more efficient method is desirable for configuring a software system to run on different elements.